package io.FileStream;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterDemo {
    public static void main(String[] args) throws IOException {
/*
void writer(int c)                               写入单个字符
void writer(char[] cbuf)                         写入字符数组
abstract void write(char[]cbuf,int off,int len)  写入字符数组的某一部分，off数组的开始索引，len写的字符的个数
void write(String str)                           写入字符串
void write(String str,int off,int len)           写入字符串的某一部分，off数组的开始索引，len写的字符的个数
void flush()                                      刷新该流的缓冲
void close()                                     关闭此流，但要先刷新它
 */
        /*
        FileWriter(File file)
        FileWriter(String FileName)
         */
//        FileWriterfw=new FileWriter("b.txt",true);就会拥有一个续写功能，原本数据不会清空
        FileWriter fw=new FileWriter("b.txt");
//        在此为b.txt重新添加数据，原内容被刷新。
        fw.write(97);//a
        fw.write('b');//b
        fw.write('c');//c
        fw.write(30000);//田
//        关闭资源时，与FileOutputStream不同，如果不关闭，数据只是保存到缓冲区，并未保存到文件

        /*
        flush与close的区别：
        因为内置缓冲区的原因，如果不关闭输出流，无法写出字符到文件中。但是关闭的流对象，
        是无法继续写出数据的。如果既要写出数据，又要继续使用流，就需要使用flush方法

        flush：刷新缓冲区，流对象可以继续使用,但最后一定还要调用close方法
        close：先刷新缓冲区，然后通知系统释放资源，流对象不可以在被使用
         */
//        演示：
        fw.write("刷");//成功：abc田刷
        fw.flush();
        fw.write("新");//abc田刷新

        fw.write("关");//abc田刷新关
//        fw.close();
      //  fw.write("闭");//java.io.IOException: Stream closed

//        一次写一个字符数组
        char[] chars="hello".toCharArray();
//        写出字符数组
//        write(char[]cbuf)和write(char[]cbuf,int off,int len)每次可以写出数组中的数据
        fw.write(chars);//abc田刷新关hello
        fw.write(chars,2,2);//abc田刷新关helloll



//        一次写一个字符串
        String msg="Hello";
//        写出字符数组
        fw.write(msg);//hello
        fw.write(msg,2,2);
        fw.close();
    }
}
